package thread2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: bjc
 * Date: 2025-08-18
 * Time: 20:48
 */
class Test {
    public int count = 0;

    synchronized public void add() {
        //默认成员方法有this对象，也就是说哪个对象调用这个方法，this就表示哪个对象
        //因为两个线程中调用add方法的都是同一个对象，所以使用的锁对象是同一个
        /*
        因为两个线程中调用的方法，是同一个对象创建的，所以锁对象
        是同一个对象，线程间产生锁竞争，避免线程安全问题
         */
        /*synchronized (*//*this*//*Test.class) {
            count++;
        }*/
        count++;
    }
}
public class ThreadDemo3 {
    public static void main(String[] args) throws InterruptedException {
        //创建对象
        Test test = new Test();

        //创建两个线程，每个线程对count加5W次
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                test.add();
            }
        });
        Thread t2 = new Thread(() -> {
            for (int i = 0; i < 50000; i++) {
                test.add();
            }
        });
        t1.start();
        t2.start();

        t1.join();
        t2.join();

        System.out.println("count = " + test.count);//正确结果
    }
}
